package com.sunrise.xdoc.service;

import java.util.Collection;
import java.util.List;
import java.util.Set;

import com.sunrise.xdoc.entity.config.Ban;
import com.sunrise.xdoc.entity.order.ChiTietDonHang;
import com.sunrise.xdoc.entity.order.DinhMuc;
import com.sunrise.xdoc.entity.order.DonHang;

/**
 * Sản phẩm service
 * 
 * @author PhanHongPhuc
 * 
 */
public interface IOrderService {
	/**
	 * Get các đơn hàng chưa thanh toán (Trạng thái DAT_HANG và DA_PHUC_VU)
	 * 
	 * @return
	 */
	public List<DonHang> getDonHangChuaThanhToans();

	/**
	 * Save or update đơn hàng
	 * 
	 * @param donHang
	 * @return donHang sau khi saveOrUpdate
	 */
	public DonHang saveOrUpdateDonHang(DonHang donHang);

	/**
	 * Xóa các đơn hàng
	 * 
	 * @param donHangs
	 */
	public void deleteDonHangs(Collection<DonHang> donHangs);

	/**
	 * Save or update chi tiết đơn hàng.
	 * 
	 * @param ctDH
	 *            chi tiết đơn hàng
	 */
	public ChiTietDonHang saveOrUpdateChiTietDH(ChiTietDonHang ctDH);

	/**
	 * Lập định mức tất cả sản phẩm. (set còn lại = định mức)
	 */
	public void canBangDinhMucAll();

	/**
	 * Get mã code, unique với các mã code của đơn hàng khác.
	 * 
	 * @return
	 */
	public long getGeneratedCode();

	/**
	 * Update dinhMuc.
	 * 
	 * @param dm
	 *            dinhMuc cần update
	 */
	public void saveOrUpdateDinhMuc(DinhMuc dm);

	/**
	 * Gộp nhiều đơn hàng thành 1 đơn hàng
	 * 
	 * @param donHangs
	 *            các đơn hàng cần gộp
	 * @param bans
	 *            các bàn thuộc về đơn hàng mới
	 * @return đơn hàng sau khi gộp
	 */
	public DonHang gopDonHangs(Collection<DonHang> donHangs, Set<Ban> bans);
}
